1 Introduction

Building on (Staffell 2017) and (Khan, Jack, and Stephenson 2018), we are interested in GHG emissions from UK electricity generation over time. We are especially interested in how this might change during the UK covid-19 lockdown period (from ).

Several articles by ythe UK ESO and others have already explored this topic:

Fortunately the UK Electricity System Operator publishes half-hourly generation data which includes both power generation (and thus ‘demand’) by fuels and also includes a per-kWh carbon intensity for the electricity produced per half-hour. We use this data to explore the following research questions:

  • To what extent has electricty demand shown deviation from ‘normal’ demand patterns during the lockdown period?

  • Has the composition of fuel sources supplying electriicty changed during this period?

  • Has the lockdown changed greenhouse-gas emissions associated with electriicty generation?

2 Data

2.1 Grid generation data

This is ‘grid’ generation from major power stations of various kinds. Data downloaded from https://data.nationalgrideso.com/carbon-intensity1/historic-generation-mix/r/historic_gb_generation_mix and pre-processed.

Table 2.1: Grid gen data (first 6 rows)
DATETIME year rDateTimeUTC GENERATION CARBON_INTENSITY
2015-01-01 00:00:00 2015 2015-01-01 00:00:00 29823 378
2015-01-01 00:30:00 2015 2015-01-01 00:30:00 30394 392
2015-01-01 01:00:00 2015 2015-01-01 01:00:00 30398 394
2015-01-01 01:30:00 2015 2015-01-01 01:30:00 29252 377
2015-01-01 02:00:00 2015 2015-01-01 02:00:00 28500 362
2015-01-01 02:30:00 2015 2015-01-01 02:30:00 28044 352

Note that according to the dataset source:

  • “Data points are either MW or %”. This may be mean MW over the half hour or it may mean MWh per half-hour. It is unclear. The % refers to the fuel mix. Which one could easily calculate from the MW values. But anyway…
  • carbon intensity is helpfully described as “The carbon intensity of electricity is a measure of how much Carbon dioxide emissions are produced per kilowatt hour of electricity consumed.”. However we assume it is gCO2e/kWh - based on https://carbonintensity.org.uk/

Table 2.2 shows the mean half hourly generation (MW) and mean carbon intensity over the years covered by the data. It also shows the implied mean half-hourly total kg CO2e per half hour which we have calculated as follows: {#kgcalc} * convert GENERATION (MW) to MWh per half hour by GENERATION/2 (1 MW for half an hour = 1/2 MWh) * convert the result to kWh (* 10000) * multiply by the CARBON_INTENSITY which is in gCO2e/kWh * divide by 1000 to get Kg

Yes, we have *1000 and then /1000 which is 1 but for the sake of clarity we have kept all the steps.

NB: we are unclear how generation via interconnect is included in the original carbon intensity calculation but note that the ESO forecast methodology document states that it is.

Table 2.2: Mean half hourly power, carbon intensity and total CO2e emissions by year - note that 2020 is incomplete
year Mean halfhourly generation (MW) Mean half-hourly carbon intensity (gCO2e/kWh) Mean total half-hourly CO2e (Tonnes) N months to date nObs
2015 34515.49 389.89 6868.11 12 17520
2016 34117.32 299.12 5259.26 12 17568
2017 33946.76 262.77 4634.16 12 17520
2018 33878.39 234.98 4116.89 12 17520
2019 33269.52 214.08 3662.47 12 17520
2020 32353.40 184.53 3072.18 5 7139

As we can see mean half-hourly generation has declined over the years but much less spectacularly than the mean carbon intensity which decreased by 30 from 2017 to 2020.

2.2 Embedded generation data

Essentially ‘non-grid’ generation from solar photovoltaic and small scale wind which is ‘embedded’ - i.e. non-grid connected as it is connected ‘downstream’ of the grid exit points. We are not entirely sure if this is accounted for in the grid dataset or not.

We have not yet found a source of this data (if we even need it).

For now embedded generation data is probably not included in the following analysis but we would expect it to depress grid demand when there is greatest insolation (middle of the day, obvs) and wind (largely random in the UK?).

3 Analysis

In this section we analyse changes in electricity demand and associated carbon emissions during the UK Covid-19 lockdown via analysis of the generation data.

3.1 Generation: Analysing deviation from ‘normal’

Several articles and analyses have suggested that demand (and thus generation) patterns have shifted so that weekdays have become more like weekends.

3.1.2 Half hourly patterns

Figure 3.2 shows total half-hourly generation since 2020-03-01. Overall generation has fallen as we would expect given the season (less heating and lighting required) and weekdays are indeed less easy to distinguish from weekends.

## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Half-hourly generation, UK (recent)

Figure 3.2: Half-hourly generation, UK (recent)

Figure 3.3 shows the daily generation profiles over time for each day of the week. Clearly the shapes are both reducing in magnitude (seasonal and lockdown effects) and also converging in shape.

Half-hourly generation, UK (recent)

Figure 3.3: Half-hourly generation, UK (recent)

## [1] 1

Figure 3.4 shows the difference between hourly and weekday patterns for lockdown 2020 and the same months in previous year(s). It is interesting to note that the twin peak demand periods have been maintained during lockdown but they are considerably lower although we should expect some ‘natural’ reduction due to the overall downward generation trend shown in Figure 3.1.

## Warning in checkPrep(mydata, vars, type, remove.calm = FALSE): Detected data with Daylight Saving Time, converting
## to UTC/GMT
timeVariation plots for half-hourly GW generation comparing lockdown 2020 with pre-lockdown starting in 2019

Figure 3.4: timeVariation plots for half-hourly GW generation comparing lockdown 2020 with pre-lockdown starting in 2019

3.1.3 Daily patterns

Figure 3.5 shows the most recent mean half-hourly GW compared to the same day in previous years. We have shifted the dates for the comparison years to ensure that weekdays and weekends line up but this does not mean that Easter is the same weekend across the comparison periods.

Note that this plot shows daily means with no indications of variance. Visible differences are therefore purely indicative at this stage. Nevertheless it is clear that 2020 is a different generation shape to the average of the previous years. Lockdown has clearly amplified the sesonal trend.

Beware temperature differences

## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Comparative daily mean half-hour generation levels 2020 vs 2017-2019

Figure 3.5: Comparative daily mean half-hour generation levels 2020 vs 2017-2019

Figure 3.6 shows the percentage difference between the mean half-hourly generation per day in 2020 and the 2017-2019 average for the same day. As we can see January 2020 was already slightly lower than previous years but February appears similar. There appears to be a substantial lockdown effect albiet with some fluctuations and a very large dip on VE Day (Friday 8th May) as we would expect.

Percentage difference in mean generation levels 2020 vs 2017-2019

Figure 3.6: Percentage difference in mean generation levels 2020 vs 2017-2019

3.1.4 Weekly patterns

tbc

3.2 Carbon Intensity: Analysing deviation from ‘normal’

There are two aspects to this. The first is carbon intensity which is driven by the mix of fuels being used to generate electricity at any given time. The second is the total greenhouse gasses emitted which is, obviously, the intensity * the volume. Given the slight uncertainty over units (see Section 2) we assume this is GENERATION * CARBON_INTENSITY.

Clearly the first of these is driven by the mix of fuels and in the UK this reflects a complex dynamic system of availability of renewables, price, interconnect and demand. To some extent we would expect that lower overall demand should (but not always) increase the share of renewables. However other factors are also at play:

  • some electricity-usage practices may have shifted to (or indeed away from) periods which are likely to have high renewable availability;
  • some electricity-usage practices may have shifted away from the ‘usual’ morning and evening peak periods which are traditionally thought to require carbon intense peaking generation if sufficient pumped hydro is not available;
  • low periods of demand might require system services from higher carbon generation

3.2.2 Half-hourly patterns

Figure 3.8 shows half-hourly carbon intensity since 2020-03-01. Overall generation has fallen as we would expect given the season (less heating and lighting required) and weekdays are indeed less easy to distinguish from weekends.

## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Half-hourly CO2e emissions, UK (recent)

Figure 3.8: Half-hourly CO2e emissions, UK (recent)

Figure 3.9 shows the daily carbon intensity profiles over time for each day of the week.

Half-hourly generation, UK (recent)

Figure 3.9: Half-hourly generation, UK (recent)

Figure 3.10 shows the difference between hourly and weekday patterns for lockdown 2020 and the previous year(s) starting from January 2019. This plot is not particularly informative since we now CI is already lower in 2020 than previous years and we would expect it to fall during the spring as solar generation increases its contributon. The lockdown phases will also be affected by small numbers of highly windy days.

## Warning in checkPrep(mydata, vars, type, remove.calm = FALSE): Detected data with Daylight Saving Time, converting
## to UTC/GMT
timeVariation plots for half-hourly carbon intensity comparing lockdown 2020 with pre-lockdown starting in 2019

Figure 3.10: timeVariation plots for half-hourly carbon intensity comparing lockdown 2020 with pre-lockdown starting in 2019

3.2.3 Daily patterns

Figure 3.11 shows the mean half-hourly carbon intensity per day in 2020 and the 2017-2019 average for the same day. As we would expect given Figure 3.7, 2020 was already considerably lower than the average of previous years but this is not necessarily sustained through lockdown although the affects of weather on solar and wind availability need to be taken in to account.

## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Percentage difference in mean carbon intensity levels 2020 vs 2017-2019

Figure 3.11: Percentage difference in mean carbon intensity levels 2020 vs 2017-2019

Figure 3.12 shows the percentage difference between the mean half-hourly carbon intensity per day in 2020 and the 2017-2019 average for the same day. As expected, 2020 was already considerably lower than the average of previous years but this is not necessarily sustained through lockdown although the affects of weather on solar and wind availability need to be taken in to account.

Percentage difference in mean carbon intensity levels 2020 vs 2017-2019

Figure 3.12: Percentage difference in mean carbon intensity levels 2020 vs 2017-2019

3.2.4 Weekly patterns

tbc

3.3 Carbon emissions (total): Analysing deviation from ‘normal’

In this section we use our calculation of total CO2e emitted per half hour (see Section 2.1) to analyse the changes in total CO2e emitted which is, after all, what we are mostly interested in from a climate change point of view. Remember that this value is driven both by total generation (demand) and carbon intensity. As we saw above, these are not always tightly correlated.

3.3.2 Half-hourly patterns

Figure 3.14 shows total half-hourly CO2e emissions since 2020-03-01. Overall generation has fallen as we would expect given the season (less heating and lighting required) and weekdays are indeed less easy to distinguish from weekends.

## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Half-hourly total CO2e emissions, UK (recent)

Figure 3.14: Half-hourly total CO2e emissions, UK (recent)

Figure 3.15 shows the daily CO2e emissions profiles over time for each day of the week since 2020-03-01.

Half-hourly CO2e emissions, UK (recent)

Figure 3.15: Half-hourly CO2e emissions, UK (recent)

Figure 3.16 shows the difference between hourly and weekday patterns for lockdown 2020 and the previous year(s) starting from January 2019. Again, due to the downward trends we have already identified, we would expect total CO2e emissions to be lower during 2020 and also to fall during the spring as solar generation increases its contributon.

## Warning in checkPrep(mydata, vars, type, remove.calm = FALSE): Detected data with Daylight Saving Time, converting
## to UTC/GMT
timeVariation plots for half-hourly CO2e comparing lockdown 2020 with pre-lockdown starting in 2019

Figure 3.16: timeVariation plots for half-hourly CO2e comparing lockdown 2020 with pre-lockdown starting in 2019

3.3.3 Daily patterns

Figure 3.17 shows the mean half-hourly carbon intensity per day in 2020 and the 2017-2019 average for the same day. As expected, 2020 was already considerably lower than the average of previous years but this is not necessarily sustained through lockdown although the affects of weather on solar and wind availability need to be taken in to account.

## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Percentage difference in mean carbon intensity levels 2020 vs 2017-2019

Figure 3.17: Percentage difference in mean carbon intensity levels 2020 vs 2017-2019

Figure 3.18 shows the percentage difference between the mean half-hourly carbon intensity per day in 2020 and the 2017-2019 average for the same day. As expected, 2020 was already considerably lower than the average of previous years but this is not necessarily sustained through lockdown although the affects of weather on solar and wind availability need to be taken in to account.

Percentage difference in mean carbon intensity levels 2020 vs 2017-2019

Figure 3.18: Percentage difference in mean carbon intensity levels 2020 vs 2017-2019

3.3.4 Weekly patterns

tbc

4 Summary (to date)

5 About

5.1 Citation

If you wish to use any of the material from this report please cite as:

  • Ben Anderson (2020) UK Electricity Generation and Carbon Itensity: covid 19 lockdown v1.0, Centre for Sustainability, University of Otago: Dunedin.

This work is (c) 2020 the authors. Usage rights are specified in the License section (5.4).

5.2 Report circulation

  • Public – this report is intended for publication.

5.3 Code

All code used to create this report is available from:

5.4 License

This work is made available under the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) License.

This means you are free to:

  • Share — copy and redistribute the material in any medium or format
  • Adapt — remix, transform, and build upon the material for any purpose, even commercially.

Under the following terms:

  • Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
  • ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
  • No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.

Notices:

  • You do not have to comply with the license for elements of the material in the public domain or where your use is permitted by an applicable exception or limitation.
  • No warranties are given. The license may not give you all of the permissions necessary for your intended use. For example, other rights such as publicity, privacy, or moral rights may limit how you use the material.

For the avoidance of doubt and explanation of terms please refer to the full license notice and legal code.

5.5 History

You may not be reading the most recent version of this report. Please check:

We do not ‘support’ the code but if you notice a problem please check the issues on our repo and if it doesn’t already exist, please open a new one. * this report’s edit history

5.6 Support

This work was supported by:

6 Annexes

6.1 Grid generation data

Table 6.1: Data summary
Name gridGenDT
Number of rows 94787
Number of columns 41
_______________________
Column type frequency:
character 3
numeric 36
POSIXct 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
DATETIME 0 1 19 19 0 94787 0
rDateTime 0 1 20 20 0 94787 0
lockdown 12 1 12 25 0 3 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
GAS 0 1 1.255570e+04 5.258830e+03 1840.0 8.449000e+03 1.224900e+04 1.643900e+04 2.747200e+04 ▅▇▇▅▁
COAL 0 1 3.113520e+03 3.707330e+03 0.0 3.790000e+02 1.474000e+03 4.900000e+03 1.775800e+04 ▇▂▁▁▁
NUCLEAR 0 1 6.990940e+03 9.660500e+02 3705.0 6.401000e+03 7.128000e+03 7.726000e+03 9.013000e+03 ▁▂▆▇▃
WIND 0 1 4.954260e+03 3.541180e+03 0.0 2.116000e+03 4.201000e+03 6.922000e+03 1.712900e+04 ▇▆▃▂▁
HYDRO 0 1 4.266700e+02 2.559800e+02 0.0 2.200000e+02 3.940000e+02 6.010000e+02 1.403000e+03 ▇▇▅▂▁
IMPORTS 0 1 2.552920e+03 8.892500e+02 0.0 2.032000e+03 2.742000e+03 3.058000e+03 4.884000e+03 ▁▃▇▇▁
BIOMASS 0 1 9.110100e+02 1.046090e+03 0.0 0.000000e+00 0.000000e+00 1.881000e+03 3.204000e+03 ▇▁▂▂▁
OTHER 0 1 8.391600e+02 8.076600e+02 0.0 9.900000e+01 6.510000e+02 1.591000e+03 2.456000e+03 ▇▁▂▁▃
SOLAR 0 1 1.208750e+03 1.905320e+03 0.0 0.000000e+00 1.100000e+01 1.910000e+03 9.680000e+03 ▇▂▁▁▁
STORAGE 0 1 2.727500e+02 3.224200e+02 0.0 0.000000e+00 2.140000e+02 4.020000e+02 2.394000e+03 ▇▂▁▁▁
GENERATION 0 1 3.382567e+04 7.038240e+03 18287.0 2.833400e+04 3.368800e+04 3.878400e+04 5.345400e+04 ▃▇▇▅▁
CARBON_INTENSITY 0 1 2.729700e+02 9.292000e+01 54.0 2.080000e+02 2.590000e+02 3.360000e+02 5.800000e+02 ▂▇▆▃▁
LOW_CARBON 0 1 1.449162e+04 4.061000e+03 6747.0 1.135900e+04 1.392200e+04 1.701600e+04 3.074600e+04 ▅▇▅▁▁
ZERO_CARBON 0 1 1.358061e+04 3.695480e+03 5164.0 1.070500e+04 1.318600e+04 1.597200e+04 2.847300e+04 ▃▇▅▂▁
RENEWABLE 0 1 6.589670e+03 3.907370e+03 125.0 3.535500e+03 6.022000e+03 8.955000e+03 2.311800e+04 ▇▇▃▁▁
FOSSIL 0 1 1.566922e+04 6.760270e+03 2421.0 1.050050e+04 1.497600e+04 2.004950e+04 3.824200e+04 ▅▇▆▂▁
GAS_perc 0 1 3.634000e+01 1.134000e+01 6.0 2.810000e+01 3.730000e+01 4.520000e+01 6.530000e+01 ▂▅▇▇▁
COAL_perc 0 1 8.500000e+00 9.550000e+00 0.0 1.200000e+00 4.300000e+00 1.420000e+01 4.530000e+01 ▇▂▂▁▁
NUCLEAR_perc 0 1 2.156000e+01 5.420000e+00 9.7 1.760000e+01 2.070000e+01 2.490000e+01 4.310000e+01 ▂▇▅▁▁
WIND_perc 0 1 1.501000e+01 1.088000e+01 0.0 6.400000e+00 1.260000e+01 2.090000e+01 5.830000e+01 ▇▆▂▁▁
HYDRO_perc 0 1 1.240000e+00 6.800000e-01 0.0 7.000000e-01 1.200000e+00 1.700000e+00 4.200000e+00 ▆▇▅▁▁
IMPORTS_perc 0 1 7.910000e+00 3.140000e+00 0.0 5.900000e+00 8.100000e+00 1.010000e+01 1.890000e+01 ▂▆▇▂▁
BIOMASS_perc 0 1 2.790000e+00 3.270000e+00 0.0 0.000000e+00 0.000000e+00 5.700000e+00 1.590000e+01 ▇▃▂▁▁
OTHER_perc 0 1 2.560000e+00 2.520000e+00 0.0 3.000000e-01 1.800000e+00 4.700000e+00 1.050000e+01 ▇▂▃▁▁
SOLAR_perc 0 1 3.370000e+00 5.440000e+00 0.0 0.000000e+00 0.000000e+00 5.100000e+00 3.180000e+01 ▇▂▁▁▁
STORAGE_perc 0 1 7.200000e-01 8.300000e-01 0.0 0.000000e+00 6.000000e-01 1.100000e+00 7.900000e+00 ▇▁▁▁▁
GENERATION_perc 0 1 1.000000e+02 0.000000e+00 100.0 1.000000e+02 1.000000e+02 1.000000e+02 1.000000e+02 ▁▁▇▁▁
LOW_CARBON_perc 0 1 4.398000e+01 1.288000e+01 16.4 3.430000e+01 4.210000e+01 5.190000e+01 8.790000e+01 ▃▇▅▂▁
ZERO_CARBON_perc 0 1 4.118000e+01 1.175000e+01 15.5 3.250000e+01 3.950000e+01 4.840000e+01 8.510000e+01 ▂▇▅▂▁
RENEWABLE_perc 0 1 1.962000e+01 1.148000e+01 0.5 1.070000e+01 1.780000e+01 2.630000e+01 6.620000e+01 ▇▇▃▁▁
FOSSIL_perc 0 1 4.484000e+01 1.272000e+01 9.0 3.630000e+01 4.590000e+01 5.420000e+01 7.670000e+01 ▁▅▇▇▂
year 0 1 2.017230e+03 1.570000e+00 2015.0 2.016000e+03 2.017000e+03 2.019000e+03 2.020000e+03 ▇▃▃▃▂
totalC02e_g 0 1 4.770075e+09 2.283246e+09 776697500.0 3.062358e+09 4.322007e+09 6.095818e+09 1.327839e+10 ▆▇▃▂▁
totalC02e_kg 0 1 4.770075e+06 2.283246e+06 776697.5 3.062358e+06 4.322007e+06 6.095818e+06 1.327839e+07 ▆▇▃▂▁
month 12 1 6.250000e+00 3.470000e+00 1.0 3.000000e+00 6.000000e+00 9.000000e+00 1.200000e+01 ▇▆▅▅▇
totalC02e_T 0 1 4.770080e+03 2.283250e+03 776.7 3.062360e+03 4.322010e+03 6.095820e+03 1.327839e+04 ▆▇▃▂▁

Variable type: POSIXct

skim_variable n_missing complete_rate min max median n_unique
rDateTimeUTC 12 1 2015-01-01 2020-05-28 17:00:00 2017-09-14 08:30:00 94775
date 12 1 2015-01-01 2020-05-28 17:00:00 2017-09-14 08:30:00 94775

6.3 Conversion factors

7 Runtime

Analysis completed in 76.49 seconds ( 1.27 minutes) using knitr in RStudio with R version 3.6.0 (2019-04-26) running on x86_64-redhat-linux-gnu.

8 R environment

8.1 R packages used

  • base R (R Core Team 2016)
  • bookdown (Xie 2016a)
  • data.table (Dowle et al. 2015)
  • drake (Landau 2019)
  • ggplot2 (Wickham 2009)
  • kableExtra (Zhu 2018)
  • knitr (Xie 2016b)
  • lubridate (Grolemund and Wickham 2011)
  • rmarkdown (Allaire et al. 2018)
  • zoo (Zeileis and Grothendieck 2005)

8.2 Session info

## R version 3.6.0 (2019-04-26)
## Platform: x86_64-redhat-linux-gnu (64-bit)
## Running under: Red Hat Enterprise Linux
## 
## Matrix products: default
## BLAS/LAPACK: /usr/lib64/R/lib/libRblas.so
## 
## locale:
##  [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C               LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8    
##  [5] LC_MONETARY=en_GB.UTF-8    LC_MESSAGES=en_GB.UTF-8    LC_PAPER=en_GB.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] openair_2.7-2     kableExtra_1.1.0  zoo_1.8-4         lubridate_1.7.8   hms_0.5.3         ggplot2_3.3.0    
##  [7] skimr_2.1.1       drake_7.12.1      data.table_1.12.0 gridCarbon_0.1.0  here_0.1         
## 
## loaded via a namespace (and not attached):
##  [1] httr_1.4.1          maps_3.3.0          tidyr_1.0.3         jsonlite_1.6        viridisLite_0.3.0  
##  [6] splines_3.6.0       R.utils_2.7.0       assertthat_0.2.0    highr_0.7           latticeExtra_0.6-28
## [11] base64url_1.4       yaml_2.2.0          progress_1.2.2      pillar_1.4.4        backports_1.1.3    
## [16] lattice_0.20-38     glue_1.3.0          digest_0.6.25       RColorBrewer_1.1-2  rvest_0.3.5        
## [21] colorspace_1.4-0    htmltools_0.3.6     Matrix_1.2-17       R.oo_1.22.0         pkgconfig_2.0.2    
## [26] bookdown_0.19       purrr_0.3.4         scales_1.0.0        webshot_0.5.2       tibble_3.0.1       
## [31] mgcv_1.8-28         txtq_0.2.0          generics_0.0.2      ellipsis_0.3.1      withr_2.1.2        
## [36] repr_1.1.0          hexbin_1.27.2       cli_2.0.2           magrittr_1.5        crayon_1.3.4       
## [41] evaluate_0.14       storr_1.2.1         R.methodsS3_1.7.1   fansi_0.4.0         nlme_3.1-139       
## [46] MASS_7.3-51.4       xml2_1.3.2          tools_3.6.0         prettyunits_1.0.2   lifecycle_0.2.0    
## [51] stringr_1.4.0       munsell_0.5.0       cluster_2.0.8       compiler_3.6.0      rlang_0.4.6        
## [56] grid_3.6.0          rstudioapi_0.11     igraph_1.2.2        labeling_0.3        base64enc_0.1-3    
## [61] rmarkdown_2.1       gtable_0.2.0        codetools_0.2-16    R6_2.3.0            knitr_1.28         
## [66] dplyr_0.8.5         utf8_1.1.4          filelock_1.0.2      rprojroot_1.3-2     readr_1.3.1        
## [71] stringi_1.2.4       parallel_3.6.0      Rcpp_1.0.1          vctrs_0.3.0         mapproj_1.2.7      
## [76] tidyselect_0.2.5    xfun_0.13

References

Allaire, JJ, Yihui Xie, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, Hadley Wickham, Joe Cheng, and Winston Chang. 2018. Rmarkdown: Dynamic Documents for R. https://CRAN.R-project.org/package=rmarkdown.

Carslaw, David C., and Karl Ropkins. 2012. “Openair — an R Package for Air Quality Data Analysis.” Environmental Modelling & Software 27–28 (0): 52–61. doi:10.1016/j.envsoft.2011.09.008.

Dowle, M, A Srinivasan, T Short, S Lianoglou with contributions from R Saporta, and E Antonyan. 2015. Data.table: Extension of Data.frame. https://CRAN.R-project.org/package=data.table.

Grolemund, Garrett, and Hadley Wickham. 2011. “Dates and Times Made Easy with lubridate.” Journal of Statistical Software 40 (3): 1–25. http://www.jstatsoft.org/v40/i03/.

Khan, Imran, Michael W. Jack, and Janet Stephenson. 2018. “Analysis of Greenhouse Gas Emissions in Electricity Systems Using Time-Varying Carbon Intensity.” Journal of Cleaner Production 184 (May): 1091–1101. doi:10.1016/j.jclepro.2018.02.309.

Landau, William Michael. 2019. Drake: A Pipeline Toolkit for Reproducible Computation at Scale. https://CRAN.R-project.org/package=drake.

R Core Team. 2016. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.

Staffell, Iain. 2017. “Measuring the Progress and Impacts of Decarbonising British Electricity.” Energy Policy 102 (March): 463–75. doi:10.1016/j.enpol.2016.12.037.

Wickham, Hadley. 2009. Ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. http://ggplot2.org.

Xie, Yihui. 2016a. Bookdown: Authoring Books and Technical Documents with R Markdown. Boca Raton, Florida: Chapman; Hall/CRC. https://github.com/rstudio/bookdown.

———. 2016b. Knitr: A General-Purpose Package for Dynamic Report Generation in R. https://CRAN.R-project.org/package=knitr.

Zeileis, Achim, and Gabor Grothendieck. 2005. “Zoo: S3 Infrastructure for Regular and Irregular Time Series.” Journal of Statistical Software 14 (6): 1–27. doi:10.18637/jss.v014.i06.

Zhu, Hao. 2018. KableExtra: Construct Complex Table with ’Kable’ and Pipe Syntax. https://CRAN.R-project.org/package=kableExtra.